package in.lib.handler.base; import in.lib.Constants; import in.lib.Debug; import in.lib.writer.MultiFileCacheWriter; import in.model.User; import in.model.base.NetObject; import in.obj.StreamMarker; import in.rob.client.page.base.UserStreamFragment; import java.util.ArrayList; import android.content.Context; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; /** * Standard response handler for User streams. * * Use {@link #getUsers()} in {@link #onCallback()} to get the returned users */ public abstract class UserStreamResponseHandler extends StreamResponseHandler<UserStreamFragment> { public UserStreamResponseHandler(Context c, boolean append) { super(c, append); } @Override public void onSuccess() { JsonElement elements = getContent(); if (elements != null) { try { MultiFileCacheWriter writer = new MultiFileCacheWriter(); JsonArray jUsers = elements.getAsJsonObject().get("data").getAsJsonArray(); int size = jUsers.size(); setObjects(new ArrayList<NetObject>(size)); for (int index = 0; index < size; index++) { JsonObject userObj = jUsers.get(index).getAsJsonObject(); User user = new User().createFrom(userObj); if (user == null) continue; getObjects().add(user); writer.scheduleAsyncWrite(String.format(Constants.CACHE_USER, user.getId()), user); } if (elements.getAsJsonObject().has("meta")) { JsonObject meta = elements.getAsJsonObject().get("meta").getAsJsonObject(); if (meta.has("max_id")) { setFirstId(meta.get("max_id").getAsString()); } else if (getObjects().size() > 0) { setFirstId(getObjects().get(0).getId()); } if (meta.has("min_id")) { setLastId(meta.get("min_id").getAsString()); } else if (getObjects().size() > 0) { setLastId(getObjects().get(getObjects().size() - 1).getId()); } if (meta.has("more")) { setHasMore(meta.get("more").getAsBoolean()); } setMarker(StreamMarker.fromObject(meta)); } onCallback(); writer.executeAsyncWriteList(); } catch (Exception e) { Debug.out(e); setDidFail(true); } } else { setDidFail(true); } } }